home *** CD-ROM | disk | FTP | other *** search
/ The Fatted Calf / The Fatted Calf.iso / Applications / Games / NeXTmille / Source / StackView.m < prev    next >
Text File  |  1990-11-07  |  2KB  |  122 lines

  1.  
  2. /* Generated by Interface Builder */
  3.  
  4. #import "StackView.h"
  5. #import    <assert.h>
  6. #import    <objc/List.h>
  7. #import    <stdio.h>
  8.  
  9.  
  10. @implementation StackView
  11.  
  12.  
  13. + newFrame:( const NXRect * )frameRect
  14. {
  15.  
  16.     
  17.     self                = [ super newFrame:frameRect ];
  18.     overlapModeFlag        =
  19.     reactiveCardsFlag    = NO;
  20.     
  21.     return self;
  22. }
  23.  
  24.  
  25. - setOverlap:( BOOL )flag
  26. {
  27.  
  28.     overlapModeFlag = flag;
  29.     
  30.     return self;
  31. }
  32.  
  33.  
  34. - addCard:( CardView * )aCard :sender
  35. {
  36.  
  37.  
  38.     [ self addSubview:[ aCard setEventsEnabled:reactiveCardsFlag ]];
  39.  
  40.     return [ self _adjustCards ];
  41. }
  42.  
  43.  
  44. - removeCard:( CardView * )aCard :sender
  45. {
  46.  
  47.  
  48.     assert([ aCard isDescendantOf:self ]);
  49.     [ aCard removeFromSuperview ];
  50.  
  51.     return [ self _adjustCards ];
  52. }
  53.  
  54.  
  55. - ( CardView * )topCard
  56. {
  57.  
  58.  
  59.     return [[ self subviews ] lastObject ];
  60. }
  61.  
  62.  
  63. - _adjustCards
  64. {
  65.  
  66.     int        i;
  67.     
  68.     for( i = 0; i < [ subviews count ]; ++i ) {
  69.         View    *aSubview = [ subviews objectAt:i ];
  70.         NXRect    subviewBounds;
  71.             
  72.                                                 // The displacement of the card from the top of this
  73.                                                 //    stack view is calculated by the cards position.  The
  74.                                                 //    top of the card is moved down 20 pixels from its
  75.                                                 //    predecessor on the stack.
  76.         [ aSubview getBounds:&subviewBounds ];
  77.         [ aSubview moveTo 
  78.                     :(( NX_WIDTH( &bounds ) - NX_WIDTH( &subviewBounds )) / 2 )
  79.                     :NX_HEIGHT( &bounds ) -  2 - ( i * ( overlapModeFlag ? 20 : 0 )) - NX_HEIGHT( &subviewBounds ) ];
  80.     }
  81.  
  82.     return self;
  83. }
  84.  
  85.  
  86. - sendCard:( CardView * )aCard to:anObject
  87. {
  88.  
  89.     assert([ aCard isDescendantOf:self ]);
  90.     [ self removeCard:aCard        :self ];
  91.     [ anObject addCard:aCard    :self ];
  92.     
  93.     return self;
  94. }
  95.  
  96.      
  97. - sendAllCardsTo:anObject
  98. {
  99.  
  100.     while([ subviews count ])
  101.         [ self sendCard:[ subviews lastObject ] to:anObject ];
  102.         
  103.     return self;
  104. }
  105.  
  106.  
  107. - ( BOOL )subviewVisible:aView
  108. {
  109.  
  110.     BOOL    retVal = YES;
  111.     
  112.     
  113.     if( !overlapModeFlag )
  114.         if([ subviews lastObject ] != aView )
  115.             retVal = NO;
  116.         
  117.     return retVal;    
  118. }
  119.  
  120.  
  121. @end
  122.